package Map集合.Map的遍历方式;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        // Map集合的遍历方式

        // 准备一个Map集合
        Map<String, Double> map = new HashMap<>();
        map.put("蜘蛛精", 162.5);
        map.put("蜘蛛精", 169.8);
        map.put("紫霞", 165.8);
        map.put("至尊宝", 169.5);
        map.put("牛魔王", 183.6);
        System.out.println(map);
//        map = {蜘蛛精=169.8, 牛魔王=183.6, 至尊宝=169.5, 紫霞=165.8}

        // 1. 键找值 : 先获取Map集合全部的键, 再通过遍历键来找值.
        // a. 获取Map集合的全部键
        Set<String> keys = map.keySet();
        System.out.println(keys);
        // b. 遍历全部的键, 根据键获取对应的值
        for (String key : keys) {
            // 根据键获取对应的值
            double value = map.get(key);
            System.out.println(key + " ===> " + value);
        }
        System.out.println("==========================");

        // 2. 键值对 : 把 "键值对 "看成一个整体进行遍历(难度较大, 看懂就行)
        // 需要用到Map集合提供的方法: Set<Map.Entry<K, V>> entrySet(): 获取所有 "键值对 "的集合
        // Map.Entry提供的方法: K getKey(): 获取键; V getValue(): 获取值
        // a. 调用Map集合提供的entrySet方法, 把Map集合转换成键值对类型的Set集合.
        Set<Map.Entry<String, Double>> entries = map.entrySet();
        // b. 然后就可以用增强for循环遍历
        for (Map.Entry<String, Double> entry : entries) {
            String key = entry.getKey();
            Double value = entry.getValue();
            System.out.println(key + " ===> " + value);
        }
        System.out.println("========================");

        // 3. Lambda表达式 : JDk 8开始之后的新技术 (非常简单)
        // 需要用到Map集合提供的方法: forEach(BiConsumer<? super K< ? super V> action): 集合Lambda遍历Map集合
        map.forEach((k, v) -> System.out.println(k + " ===> " + v));
    }
}
